package CharliesCookies;

import com.dp1.pucp.Modelo.Clases.*;

import com.dp1.pucp.Administracion.Controlador.*;
import com.dp1.pucp.Administracion.DAO.*;
import com.dp1.pucp.Administracion.Vista.*;

import com.dp1.pucp.Compras.Controlador.*;
import com.dp1.pucp.Compras.DAO.*;
import com.dp1.pucp.Compras.VIsta.*;

import com.dp1.pucp.Logistica.Controlador.*;
import com.dp1.pucp.Logistica.DAO.*;
import com.dp1.pucp.Logistica.Vista.*;

import com.dp1.pucp.Produccion.Controlador.*;
import com.dp1.pucp.Produccion.Vista.*;

import com.dp1.pucp.Reportes.Controlador.*;
import com.dp1.pucp.Reportes.DAO.*;
import com.dp1.pucp.Reportes.Vista.*;

//******INICIO MÓDULO DE SEGURIDAD***************
import com.dp1.pucp.Seguridad.Vista.*;
import com.dp1.pucp.Seguridad.Controlador.*;
import com.dp1.pucp.Seguridad.DAO.*;
import com.dp1.pucp.Simulacion.Controlador.*;
import com.dp1.pucp.Simulacion.DAO.*;
import com.dp1.pucp.Simulacion.VIsta.*;
//******FIN MÓDULO DE SEGURIDAD***************

//******INICIO MÓDULO DE VENTASD***************
import com.dp1.pucp.Ventas.VIsta.*;
import com.dp1.pucp.Ventas.Controlador.*;
import com.dp1.pucp.Ventas.DAO.*;
//******FIN MÓDULO DE VENTAS***************
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class MainController {

    private MainMenuGUI view;
    public static Usuario usuario;
    public ArrayList<Rolxperfil> permisos = new ArrayList<>();

    public MainController(MainMenuGUI view, Usuario usuario) {
        this.view = view;
        this.usuario = usuario;
//        this.view.llenarPanelInfo(usuario);

        PerfilDAO perfilDAO = new PerfilDAO();
        this.permisos = perfilDAO.listarRolxPerfil(usuario.getPerfil());

        /*ADMINISTRACION*/
        this.view.addBuscarEmpleadoMenutItem(new ShowEmpleadosMenuItem());
        this.view.addBuscarMaquinariaMenutItem(new ShowMaquinariaMenuItem());

        /*COMPRAS*/
        this.view.addMantProveedorMenuItem(new ShowMantProveedorMenuItem()); // MantenimientoProveedores - MAKI
        this.view.addIngresoMateriaPrimaMapaMenuItem(new ShowIngresoMateriaPrimaMenuItem());
//        this.view.addMantCuentaPorPagarMenuItem(new ShowMantCuentaPorPagarMenuItem()); // MantenimientCuentaPorPagar - MAKI
        this.view.addMantOrdenDeCompraMenuItem(new ShowMantOrdenDeCompraMenuItem()); // MantenimientOrdeCOmpra - MAKI

        /*LOGISTICA*/
        this.view.addMantTipoProductoMenutItem(new ShowTipoProductoMenuItem());
        this.view.addMantAlmacenMenutItem(new ShowAlmacenMenuItem());
        this.view.addAceptarPedidoProductoMenutItem(new ShowAceptarPedidoProduccionMenuItem());
        this.view.addPedidoProduccionMenutItem(new ShowPedidoProduccionMenuItem());
        this.view.addPedidoCompraItem(new ShowPedidoCompraMenuItem());
        this.view.addAjustesAlmacenMenuItem(new ShowAjustesAlmacenMenuItem());
        this.view.addDetalleKardexMenutItem(new ShowDetalleKardexMenuItem());
        this.view.addProcesarPedidoItem(new ShowProcesarPedidoMenuItem());
//        this.view.addProducirPedidoItem(new ShowProducirPedidoMenuItem());
        this.view.addReporteProductosMenuItem(new showReporteProductosMenuItem());
        this.view.addReporteKardexMenuItem(new showReporteKardexMenuItem());

        /*VENTAS*/
        this.view.addMantClienteMenu(new ShowClienteMenu());
        this.view.addMantPedidoProdMenu(new ShowPedidoProdMenu());
        this.view.addMantDocVentaMenu(new ShowDocVentaMenu());
        this.view.addMantPresentacionMenu(new ShowPresentacionMenu());
        this.view.addMantPrecioMenu(new ShowPrecioMenu());
        this.view.addReporteVentasMenuItem(new ShowReporteVentasMenu());

        /*SEGURIDAD*/
        this.view.addMantUsuariosMenu(new ShowUsuariosMenu());
        this.view.addMantPerfilesMenu(new ShowPerfilesMenu());
        this.view.addMantLogMenu(new ShowLOGMenu());

        /*PRODUCCION*/
        this.view.addMantSimulacionMenu(new ShowSimulacionItem());
        this.view.addMantParametrizacionMenu(new ShowParametrizacionItem());
        this.view.addMantOrdenarProduccionMenu(new ShowOrdenarProduccionItem());
        this.view.addCargaMasivaMenuItem(new ShowCargaMasivaItem());
        this.view.addMantAtenderPedidosProductoMenu(new ShowAtencionPedidosProductoItem());
        this.view.addPlanDeProduccionMenu(new ShowPlanDeProduccionItem());

        /*SALIR*/
        this.view.addSalirListener(new SalirListener());

        view.setVisible(true);


    }

    public MainMenuGUI getVista() {
        return this.view;
    }

    //******INICIO MÓDULO DE COMPRAS***************
    class ShowMantProveedorMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Proveedores")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                ProveedorDAO dao = new ProveedorDAO();
                MantProveedorGUI2 mantProveedorGUI = new MantProveedorGUI2();
                MantProveedorControlador controlador = new MantProveedorControlador(dao, mantProveedorGUI);
//                view.setCurrentPanel(mantProveedorGUI);
                view.getContentPane().removeAll();
                view.repaint();
                LogDAO.insertarLog(usuario, "Ingresar Mantenimiento Proveedores");
                view.add(mantProveedorGUI);
                mantProveedorGUI.show();

            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowMantOrdenDeCompraMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Orden de Compra")) {
                    // if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                OrdenCompraDAO dao = new OrdenCompraDAO();
                MantenimientoOrdenCompraGUI2 mantOrdenCompraGUI = new MantenimientoOrdenCompraGUI2();
                MantOrdenCompraControlador controlador = new MantOrdenCompraControlador(dao, mantOrdenCompraGUI, 1); //1 porque es 
//                view.setCurrentPanel(mantOrdenCompraGUI);
                view.getContentPane().removeAll();
                view.repaint();
                LogDAO.insertarLog(usuario, "Ingresar Mantenimiento Orden de Compra");
                view.add(mantOrdenCompraGUI);
                mantOrdenCompraGUI.show();

            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowMantCuentaPorPagarMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Cuenta Por Pagar")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                CuentaPorPagarDAO dao = new CuentaPorPagarDAO();
                MantenimientoCuentaPorPagarGUI mantCuentaPorPagarGUI = new MantenimientoCuentaPorPagarGUI();
                MantCuentaPorPagarControlador controlador = new MantCuentaPorPagarControlador(dao, mantCuentaPorPagarGUI);
//                view.setCurrentPanel(mantCuentaPorPagarGUI);

            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowIngresoMateriaPrimaMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Ingreso Materia Prima")) {
                    acceso = true;
                }
            }

            if (acceso) {
                OrdenCompraDAO dao = new OrdenCompraDAO();
                MantenimientoOrdenCompraGUI2 mantOrdenGUI = new MantenimientoOrdenCompraGUI2();
                MantOrdenCompraControlador controlador = new MantOrdenCompraControlador(dao, mantOrdenGUI, 2); //2 porque estoy llamando desde ingreso de materia prima
//                view.setCurrentPanel(mantOrdenGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(mantOrdenGUI);
                mantOrdenGUI.show();

            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    //******FIN MÓDULO DE COMPRAS***************
    //******INICIO MÓDULO DE SEGURIDAD***************
    class ShowUsuariosMenu implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Usuarios")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                UsuarioDAO dao = new UsuarioDAO();
                MantUsuarioGUI2 buscarUsuarioGUI = new MantUsuarioGUI2();
                MantUsuarioControlador controlador = new MantUsuarioControlador(dao, buscarUsuarioGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(buscarUsuarioGUI);
                buscarUsuarioGUI.show();
                // calculamos el tamaño de la ventana a partir del ancho de la pantalla
            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowPerfilesMenu implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Perfiles")) {
                    // if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                PerfilDAO dao = new PerfilDAO();
                MantPerfilGUI2 buscarPerfilGUI = new MantPerfilGUI2();
                MantPerfilControlador controlador = new MantPerfilControlador(dao, buscarPerfilGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(buscarPerfilGUI);
                buscarPerfilGUI.show();
                // calculamos el tamaño de la ventana a partir del ancho de la pantalla
                int ancho = view.dim.width / 3;
                int alto = view.dim.height / 3;
            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowLOGMenu implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Reportes Log")) {
                    // if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                ReportesDAO dao = new ReportesDAO();
                ReporteLogGUI2 buscarLOGGUI = new ReporteLogGUI2();
                ReporteLOGControlador controlador = new ReporteLOGControlador(dao, buscarLOGGUI);
//                view.setCurrentPanel(buscarLOGGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(buscarLOGGUI);
                buscarLOGGUI.show();
            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }
    //******FIN DE MÓDULO DE SEGURIDAD***************

//*****MÓDULO DE VENTAS******************
    class ShowClienteMenu implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Cliente")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                ClienteDAO dao = new ClienteDAO();
                MantClienteGUI2 mantClienteGUI = new MantClienteGUI2();
                MantClienteControlador controlador = new MantClienteControlador(dao, mantClienteGUI);
//                view.setCurrentPanel(mantClienteGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(mantClienteGUI);
                mantClienteGUI.show();
            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowPedidoProdMenu implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Pedidos")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                PedidoProdDAO dao = new PedidoProdDAO();
                MantPedidoProdGUI2 mantPedidoProdGUI = new MantPedidoProdGUI2();
                MantPedidoProdControlador controlador = new MantPedidoProdControlador(dao, mantPedidoProdGUI);
//                view.setCurrentPanel(mantPedidoProdGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(mantPedidoProdGUI);
                mantPedidoProdGUI.show();
            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowDocVentaMenu implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Documento de Venta")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                DocVentaDAO dao = new DocVentaDAO();
                MantDocVentaGUI2 mantDocVentaGUI = new MantDocVentaGUI2();
                MantDocVentaControlador c = new MantDocVentaControlador(dao, mantDocVentaGUI);

//                view.setCurrentPanel(mantDocVentaGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(mantDocVentaGUI);
                mantDocVentaGUI.show();
            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowPrecioMenu implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Precios")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                PrecioDAO dao = new PrecioDAO();
                MantPrecioGUI2 mantPrecioGUI = new MantPrecioGUI2();
                MantPrecioControlador controlador = new MantPrecioControlador(dao, mantPrecioGUI);
//                view.setCurrentPanel(mantPrecioGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(mantPrecioGUI);
                mantPrecioGUI.show();
            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowPresentacionMenu implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Presentaciones")) {
                    acceso = true;
                }
            }

            if (acceso) {
                PresentacionDAO dao = new PresentacionDAO();
                MantPresentacionGUI2 mantPresentacionGUI = new MantPresentacionGUI2();
                MantPresentacionControlador controlador = new MantPresentacionControlador(dao, mantPresentacionGUI);
//                view.setCurrentPanel(mantPresentacionGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(mantPresentacionGUI);
                mantPresentacionGUI.show();
            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowReporteVentasMenu implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Reporte de Ventas")) {
                    // if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                ReportesDAO dao = new ReportesDAO();
                ReporteVentasGUI2 reporteVentasGUI = new ReporteVentasGUI2();
                ReporteVentaControlador controlador = new ReporteVentaControlador(dao, reporteVentasGUI);
//                view.setCurrentPanel(reporteVentasGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(reporteVentasGUI);
                reporteVentasGUI.show();

            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }
    //******FIN DE MÓDULO DE VENTAS***************

    /**
     * ****FIN DE MÓDULO DE ADMINISTRACION**************
     */
    class ShowEmpleadosMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Empleados")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                RRHHDAO dao = new RRHHDAO();
                MantOperarioGUI2 buscarEmpleadoGUI = new MantOperarioGUI2();
                BuscarRRHHControlador controlador = new BuscarRRHHControlador(dao, buscarEmpleadoGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(buscarEmpleadoGUI);
                buscarEmpleadoGUI.show();
                // calculamos el tamaño de la ventana a partir del ancho de la pantalla
                int ancho = view.dim.width / 3;
                int alto = view.dim.height / 3;
                //buscarEmpleadoGUI.setLocation(view.dim.width/2-ancho/2,view.dim.height/2-alto/2);
                //buscarEmpleadoGUI.setLocation(546,256);

                //view.setCurrentPanel(buscarEmpleadoGUI);
            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowMaquinariaMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Maquinaria")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                RRHHDAO dao = new RRHHDAO();
                MantMaquinariaGUI2 buscarMaquinariaGUI = new MantMaquinariaGUI2();
                MantMaquinariaControlador controlador = new MantMaquinariaControlador(dao, buscarMaquinariaGUI);
                view.getContentPane().removeAll();
                view.add(buscarMaquinariaGUI);

                buscarMaquinariaGUI.show();
                //view.setCurrentPanel(buscarMaquinariaGUI);
            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    /**
     * ****FIN DE MÓDULO DE ADMINISTRACION**************
     */
    //******INICIO MÓDULO DE LOGISTICA***************
    class ShowProcesarPedidoMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Procesar Pedido")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                ProcesarPedidosDAO dao = new ProcesarPedidosDAO();
                ProcesarPedidoGUI2 procesarPedidoGUI = new ProcesarPedidoGUI2();
                ProcesarPedidosControlador controlador = new ProcesarPedidosControlador(dao, procesarPedidoGUI);
//                view.setCurrentPanel(procesarPedidoGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(procesarPedidoGUI);
                procesarPedidoGUI.show();

            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowProducirPedidoMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                ProcesarPedidosDAO dao = new ProcesarPedidosDAO();
                ProcesarPedidoGUI2 procesarPedidoGUI = new ProcesarPedidoGUI2();
                ProcesarPedidosControlador controlador = new ProcesarPedidosControlador(dao, procesarPedidoGUI);
//                view.setCurrentPanel(procesarPedidoGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(procesarPedidoGUI);
                procesarPedidoGUI.show();

            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class showReporteProductosMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Reporte Producto")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                ReportesDAO dao = new ReportesDAO();
                ReporteProductosGUI2 reporteProductoGUI = new ReporteProductosGUI2();
                ReporteProductoControlador controlador = new ReporteProductoControlador(dao, reporteProductoGUI);
//                view.setCurrentPanel(reporteProductoGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(reporteProductoGUI);
                reporteProductoGUI.show();


            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class showReporteKardexMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Reporte KARDEX")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                ReportesDAO dao = new ReportesDAO();
                ReporteKardexGUI2 reporteKardexGUI = new ReporteKardexGUI2();
                ReporteKardexControlador controlador = new ReporteKardexControlador(dao, reporteKardexGUI);
//                view.setCurrentPanel(reporteKardexGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(reporteKardexGUI);
                reporteKardexGUI.show();


            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowTipoProductoMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Productos")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                TipoProductoDAO dao = new TipoProductoDAO();
                MantTipoProductoGUI2 mantTipoProductoGUI = new MantTipoProductoGUI2();
                MantTipoProductoControlador controlador = new MantTipoProductoControlador(dao, mantTipoProductoGUI);
//                view.setCurrentPanel(mantTipoProductoGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(mantTipoProductoGUI);
                mantTipoProductoGUI.show();

            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowDetalleKardexMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Kardex")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                TipoProductoDAO dao = new TipoProductoDAO();
                KardexGUI2 detalleKardexGUI = new KardexGUI2();
                KardexControlador controlador = new KardexControlador(dao, detalleKardexGUI);
//                view.setCurrentPanel(detalleKardexGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(detalleKardexGUI);
                detalleKardexGUI.show();



            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowProcesarPedidoItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Procesar Pedido")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                TipoProductoDAO dao = new TipoProductoDAO();
                KardexGUI2 detalleKardexGUI = new KardexGUI2();
                KardexControlador controlador = new KardexControlador(dao, detalleKardexGUI);
                view.setCurrentPanel(detalleKardexGUI);

            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowProducirPedidoItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                TipoProductoDAO dao = new TipoProductoDAO();
                KardexGUI2 detalleKardexGUI = new KardexGUI2();
                KardexControlador controlador = new KardexControlador(dao, detalleKardexGUI);
                view.setCurrentPanel(detalleKardexGUI);

            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowAceptarPedidoProduccionMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                TipoProductoDAO dao = new TipoProductoDAO();
                AceptarPedidoProductoGUI2 aceptarOrdenPedidoProductoGUI = new AceptarPedidoProductoGUI2();
                AceptarPedidoProductoControlador controlador = new AceptarPedidoProductoControlador(dao, aceptarOrdenPedidoProductoGUI);
//                view.setCurrentPanel(aceptarOrdenPedidoProductoGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(aceptarOrdenPedidoProductoGUI);
                aceptarOrdenPedidoProductoGUI.show();

            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowPedidoCompraMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Pedido de Compra")) {
                    //     if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                TipoProductoDAO dao = new TipoProductoDAO();
                MantPedidoCompraGUI2 pedidoCompraGUI = new MantPedidoCompraGUI2();
                MantPedidoCompraControlador controlador = new MantPedidoCompraControlador(dao, pedidoCompraGUI);
//                view.setCurrentPanel(pedidoCompraGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(pedidoCompraGUI);
                pedidoCompraGUI.show();


            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowPedidoProduccionMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Pedido de Produccion")) {
                    //if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                TipoProductoDAO dao = new TipoProductoDAO();
                MantPedidoProduccionGUI2 pedidoProduccionGUI = new MantPedidoProduccionGUI2();
                MantPedidoProduccionControlador controlador = new MantPedidoProduccionControlador(dao, pedidoProduccionGUI);
//                view.setCurrentPanel(pedidoProduccionGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(pedidoProduccionGUI);
                pedidoProduccionGUI.show();

            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowAlmacenMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Almacen")) {
                    //  if (permisos.get(i).getRol().getCodigo().contains("")) {
                    acceso = true;
                }
            }

            if (acceso) {
                TipoProductoDAO dao = new TipoProductoDAO();
                MantAlmacenGUI2 mantAlmacenGUI = new MantAlmacenGUI2();
                MantAlmacenControlador controlador = new MantAlmacenControlador(dao, mantAlmacenGUI);
////                view.setCurrentPanel(mantAlmacenGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(mantAlmacenGUI);
                mantAlmacenGUI.show();

            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    class ShowAjustesAlmacenMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean acceso = false;
            for (int i = 0; i < permisos.size(); i++) {
                if (permisos.get(i).getRol().getCodigo().contains("Ajustes de Almacen")) {
                    acceso = true;
                }
            }

            if (acceso) {
                TipoProductoDAO dao = new TipoProductoDAO();
                //Tipoproducto u=new Tipoproducto();
                AjustesAlmacenGUI2 ajustesAlmacenGUI = new AjustesAlmacenGUI2();
                AjustesAlmacenControlador controlador = new AjustesAlmacenControlador(dao, ajustesAlmacenGUI);
//                view.setCurrentPanel(ajustesAlmacenGUI);
                view.getContentPane().removeAll();
                view.repaint();
                view.add(ajustesAlmacenGUI);
                ajustesAlmacenGUI.show();

            } else {
                JOptionPane.showMessageDialog(view, "No tiene permiso para acceder a esta ventana");
            }
        }
    }

    //*****FIN DE MÓDULO DE LOGISTICA**********
    class ShowBuscarProductosMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
        }
    }

    class ShowClienteMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
        }
    }

    class ShowBuscarPedidosMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
        }
    }

    class ShowVehiculosMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
        }
    }

    class ShowTurnosMenuItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
        }
    }

    class SalirListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            LogDAO.insertarLog(usuario, "Salir de Sistema");
            view.dispose();

        }
    }

    //******INICIO MÓDULO DE SIMULACION***************
    class ShowSimulacionItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            SimulacionDAO dao = new SimulacionDAO();
            RRHHDAO rdao = new RRHHDAO();
            ConsultaPedidosGUI2 consultaPedidosGUI = new ConsultaPedidosGUI2();
            MantSimulacionGUI2 mantSimulacionGUI = new MantSimulacionGUI2();
            SimulacionControlador controlador = new SimulacionControlador(dao, rdao, mantSimulacionGUI, consultaPedidosGUI, getVista());
//            view.setCurrentPanel(mantSimulacionGUI);
            view.getContentPane().removeAll();
            view.repaint();
            view.add(mantSimulacionGUI);
            mantSimulacionGUI.show();
        }
    }

    class ShowOrdenarProduccionItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            MantProduccionGUI2 mantProduccionGUI = new MantProduccionGUI2();
            MantProduccionControlador controlador = new MantProduccionControlador(mantProduccionGUI);
//            view.setCurrentPanel(mantProduccionGUI);
            view.getContentPane().removeAll();
            view.repaint();
            view.add(mantProduccionGUI);
            mantProduccionGUI.show();



        }
    }

    class ShowCargaMasivaItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            CargaMasivaDAO dao = new CargaMasivaDAO();
            CargaMasivaGUI2 cargaMasivaGUI = new CargaMasivaGUI2();
            CargaMasivaControlador controlador = new CargaMasivaControlador(cargaMasivaGUI, dao);
//            view.setCurrentPanel(cargaMasivaGUI);
            view.getContentPane().removeAll();
            view.repaint();
            view.add(cargaMasivaGUI);
            cargaMasivaGUI.show();
        }
    }

    class ShowParametrizacionItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            SimulacionDAO dao = new SimulacionDAO();
            ParametrosSimulacionGUI2 parametrosSimulacionGUI = new ParametrosSimulacionGUI2();
            ParametrosControlador controlador = new ParametrosControlador(dao, parametrosSimulacionGUI);
//            view.setCurrentPanel(parametrosSimulacionGUI);
            view.getContentPane().removeAll();
            view.repaint();
            view.add(parametrosSimulacionGUI);
            parametrosSimulacionGUI.show();
        }
    }

    class ShowAtencionPedidosProductoItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            SimulacionDAO dao = new SimulacionDAO();
            RRHHDAO rdao = new RRHHDAO();
            ConsultaPedidosGUI2 consultaPedidosGUI = new ConsultaPedidosGUI2();
            MantSimulacionGUI2 mantSimulacionGUI = new MantSimulacionGUI2();
            SimulacionControlador controlador = new SimulacionControlador(dao, rdao, mantSimulacionGUI, consultaPedidosGUI, getVista());
//            view.setCurrentPanel(consultaPedidosGUI);
            view.getContentPane().removeAll();
            view.repaint();
            view.add(consultaPedidosGUI);
            consultaPedidosGUI.show();
        }
    }

    class ShowPlanDeProduccionItem implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            PedidoProdDAO dao = new PedidoProdDAO();
            MantPlanProdGUI2 consultaPlanProdGUI = new MantPlanProdGUI2();
            MantPlanProdControlador controlador = new MantPlanProdControlador(dao, consultaPlanProdGUI);
//            view.setCurrentPanel(consultaPlanProdGUI);
            view.getContentPane().removeAll();
            view.repaint();
            view.add(consultaPlanProdGUI);
            consultaPlanProdGUI.show();
        }
    }
    //******FIN DE MÓDULO DE SIMULACION***************
}
